接下来要介绍本书中有关Memleak的最后一个特性,即跟踪指定类型的内存分配,以之前的示例来说,就是找出Leak$DemoObject
实例都是再哪里分配的。右键点击目标类型,选择 Trace Allocations菜单,然后Memleak会将导致内存泄漏的目标代码附近的方法调用列出来。
从上面的截图中可以看到,put
方法调用次数多余remove
方法。如果是在Eclipse中运行Memleak的话,右键点击相应的栈帧,选择Open Method
菜单就可以直接跳转到目标代码处了。
针对某个类的内存分配追踪只能启用一次。
注意:启用内存分配追踪可能会引入较大的性能开销。例如,因为
java.lang.String
类的使用非常频繁,因此,追踪它的内存分配显然不太理智。